package cn.iocoder.yudao.module.system.dal.dataobject.tenant;

import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 租户 DO
 *
 * @author 芋道源码
 */
@TableName(value = "system_tenant", autoResultMap = true)
@KeySequence("system_tenant_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class TenantDO extends BaseDO {

    /**
     * 套餐编号 - 系统
     */
    public static final Long PACKAGE_ID_SYSTEM = 0L;

    /**
     * 租户编号，自增
     */
    private Long id;
    /**
     * 租户名，唯一
     */
    private String name;
    /**
     * 联系人的用户编号
     *
     * 关联 {@link AdminUserDO#getId()}
     */
    private Long contactUserId;
    /**
     * 联系人
     */
    private String contactName;
    /**
     * 联系手机
     */
    private String contactMobile;
    /**
     * 租户状态
     *
     * 枚举 {@link CommonStatusEnum}
     */
    private Integer status;

    /**
     * '审核状态（0未认证，1待审核，2审核成功，3审核失败）'
     */
    private Integer auditStatus;
    /**
     * 绑定域名
     */
    private String website;
    /**
     * 租户套餐编号
     *
     * 关联 {@link TenantPackageDO#getId()}
     * 特殊逻辑：系统内置租户，不使用套餐，暂时使用 {@link #PACKAGE_ID_SYSTEM} 标识
     */
    private Long packageId;
    /**
     * 过期时间
     */
    private LocalDateTime expireTime;
    /**
     * 账号数量
     */
    private Integer accountCount;

    /**
     * 企业简称
     */
    private String shortName;

    /**
     * 企业统一信用代码
     */
    private String businessLicenseName;

    /**
     * 营业执照照片
     */
    private String businessLicenseUrl;

    /**
     * 企业logo
     */
    private String logoUrl;

    /**
     * 从事行业(字典值 position_category)
     */
    private Long industry;

    /**
     * 从事行业名称
     */
    private String industryName;

    /**
     * 企业性质(字典值 company_type)
     */
    private Long companyNature;

    /**
     * 企业性质名称
     */
    private String companyNatureName;

    /**
     * 企业规模(字典值 company_size)
     */
    private Long companyScale;

    /**
     * 企业规模名称
     */
    private String companyScaleName;

    /**
     * 所在地区-省编码
     */
    private String provinceCode;

    /**
     * 所在地区-省名称
     */
    private String provinceName;

    /**
     * 所在地区-市编码
     */
    private String cityCode;

    /**
     * 所在地区-市名称
     */
    private String cityName;

    /**
     * 所在地区-区编码
     */
    private String districtCode;

    /**
     * 所在地区-区名称
     */
    private String districtName;

    /**
     * 详细地址
     */
    private String address;

    /**
     * 企业简介
     */
    private String description;

    /**
     * 公司照片(多个逗号分隔)
     */
    private String companyPhotos;

    /**
     * 公司福利(字典值 benefits,多个逗号分隔)
     */
    private String companyWelfare;

    /**
     * 公司福利名称(多个逗号分隔)
     */
    private String companyWelfareNames;

    /**
     * 当前企业所发布的职位总数
     */
    @TableField(exist = false)
    private Integer positions;
}
